﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*. Условие
Дана текстовая строка, состоящая из заглавных латинских букв. Требуется найти подстроку из трёх букв, которая встречается в данной 
строке чаще всего. Например, в строке DEFDEFABCABCZABCDEFDEF чаще всего (4 раза) встречается подстрока DEF.

Формат входного файла
Входной файл содержит текстовую строку.

Формат выходного файла
Выходной файл должен содержать единственное число — количество вхождений самой часто встречающейся подстроки из трёх букв.

Ограничения
Длина исходной строки от 3 до 1000000 символов.*/

            string incoming = File.ReadAllText(".//..//..//in.txt");
            Dictionary<string, int> d = new Dictionary<string, int>();
            int max = 0;
            string maxStr = "";
            for (int i = 0; i <= incoming.Length - 3; i++)
            {
                string s = incoming.Substring(i, 3); // current substring

                if (!d.ContainsKey(s))
                {
                    d.Add(s, 1);
                }
                else
                {
                    int value;
                    if (d.TryGetValue(s, out value))
                    {
                        d[s] = value + 1;
                    }
                }
                if (d[s] > max)
                {
                    max = d[s];
                    maxStr = s;
                }
            }


            File.WriteAllText(".//..//..//out.txt", max.ToString());

            /* Console.WriteLine("element "+maxStr + ": " + max+" times");
             Console.WriteLine();*/
        }
    }
}
